<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
</body>
<script>
    // 定义： 方法返回一个从开始到结束（不包括结束）选择的数组的一部分浅拷贝到一个新数组对象，且原数组不会被修改。
    // 注意：字符串也有一个slice() 方法是用来提取字符串的，不要弄混了。
    // 语法:
    // array.slice(begin, end);

    // 参数:
    // end(可选):索引数值(不包括),接受负值，在该索引处前结束提取原数组元素，默认值为数组末尾(包括最后一个元素)。
    
    // let a = ['hello', 'world'];
    // let b = a.slice(0, 1); // ['hello']
    // a[0]='改变原数组';
    // console.log(a, b); // ['改变原数组', 'world'] ['hello']
    // b[0] = '改变拷贝的数组';
    // consoe.log(a, b);

    // 如上：新数组是浅拷贝的，元素是简单数据类型，改变之后不会互相干扰。
    // 如果是复杂数据类型(对象,数组)的话，改变其中一个，另外一个也会改变。

    let a = [{name:'OBKoro1'}];
    let b = a.slice();
    console.log(b,a); // {name: 'OBKoro1'}
    // a[0].name='改变原数组';
    // console.log(b,a); // [{"name":"改变原数组"}] [{"name":"改变原数组"}]
    // b[0].name='改变拷贝数组',b[0].koro='改变拷贝数组';
    //  [{"name":"改变拷贝数组","koro":"改变拷贝数组"}] [{"name":"改变拷贝数组","koro":"改变拷贝数组"}]


    // 原因在定义上面说过了的：slice()是浅拷贝，对于复杂的数据类型浅拷贝，拷贝的只是指向原数组的指针，所以无论改变原数组，还是浅拷贝的数组，都是改变原数组的数据。

</script>
</html>